複選按鈕 (QCheckBox)和單選按鈕 (QRadioButton)
- QCheckBox (複選按鈕) : 是一種可以多選的按鈕,允許用戶選擇多個選項。
- QRadioButton(單選按鈕) : 是一種單選按鈕,通常成組使用,允許用戶在多個選項中僅選擇一個。
1. QCheckBox 使用
QCheckBox : 複選按鈕,用於允許用戶選擇多個選項。例如,在表單中,用戶可以勾選多個複選框來同時選擇多個項目。
QCheckBox 添加按鈕
-
QCheckBox(str)
: 添加按鈕。下面是一個添加兩個複選按鈕的範例。
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QCheckBox, QLabel
class CheckBoxExample(QWidget):
def __init__(self):
super().__init__()
# 創建佈局
layout = QVBoxLayout()
# 創建 QCheckBox
checkbox1 = QCheckBox("選項1")
checkbox2 = QCheckBox("選項2")
# 添加元件到佈局
layout.addWidget(checkbox1)
layout.addWidget(checkbox2)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication([])
window = CheckBoxExample()
window.show()
app.exec()
QCheckBox 常用的信號
-
checkStateChanged.connect(function)
: 當勾選狀態改變時,會發送信號。下面範例是當按鈕狀態改變時,標籤文字會改變。
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QCheckBox, QLabel
class CheckBoxExample(QWidget):
def __init__(self):
super().__init__()
# 創建佈局
layout = QVBoxLayout()
# 創建 QCheckBox
checkbox1 = QCheckBox("選項1")
checkbox2 = QCheckBox("選項2")
#創建標籤
label = QLabel("空")
checkbox1.checkStateChanged.connect(lambda: label.setText("選項1按鈕改變了"))
checkbox2.checkStateChanged.connect(lambda: label.setText("選項2按鈕改變了"))
# 添加元件到佈局
layout.addWidget(checkbox1)
layout.addWidget(checkbox2)
layout.addWidget(label)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication([])
window = CheckBoxExample()
window.show()
app.exec()
QCheckBox 常用的功能
-
setChecked(bool)
: 設定按鈕的勾選狀態。下面範例是創建一個QCeckBox並預設是勾選。
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QCheckBox, QLabel
class CheckBoxExample(QWidget):
def __init__(self):
super().__init__()
# 創建 QCheckBox,並預設選項1初始是勾選的
checkbox1 = QCheckBox("選項1",self)
checkbox1.setChecked(True)
if __name__ == "__main__":
app = QApplication([])
window = CheckBoxExample()
window.show()
app.exec()
-
setDisabled(bool)
: 設定是否禁用。下面範例是創建一格QCheckBox並禁用。
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QCheckBox, QLabel
class CheckBoxExample(QWidget):
def __init__(self):
super().__init__()
# 創建 QCheckBox,並禁用選項1
checkbox1 = QCheckBox("選項1",self)
checkbox1.setDisabled(True)
if __name__ == "__main__":
app = QApplication([])
window = CheckBoxExample()
window.show()
app.exec()
-
isChecked(bool)
: 用於得知目前按鈕的狀態。下面範例是print按鈕的狀態。
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QCheckBox, QLabel
class CheckBoxExample(QWidget):
def __init__(self):
super().__init__()
# 創建 QCheckBox
checkbox = QCheckBox("選項1",self)
checkbox.checkStateChanged.connect(lambda: print(checkbox.isChecked()))
if __name__ == "__main__":
app = QApplication([])
window = CheckBoxExample()
window.show()
app.exec()
2. QRadioButton 使用
QRadioButton : 單選按鈕,通常為幾個按鈕為一組,例如,在表單中,用戶是男是女的單選,就可以使用。
QRadioButton 添加按鈕和編組
-
QRadioButton(str)
: 添加按鈕。下面範例是新增按鈕男,女,台北,台中。
from PySide6.QtWidgets import QApplication, QWidget, QRadioButton, QLabel , QGridLayout
class RadioButtonExample(QWidget):
def __init__(self):
super().__init__()
# 創建 QRadioButton
boy_button = QRadioButton("男")
girl_button = QRadioButton("女")
Taipei_button = QRadioButton("台北")
Taichung_button = QRadioButton("台中")
#布局
layout = QGridLayout()
layout.addWidget(boy_button,0,0)
layout.addWidget(girl_button,0,1)
layout.addWidget(Taipei_button,1,0)
layout.addWidget(Taichung_button,1,1)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication([])
window = RadioButtonExample()
window.show()
app.exec()
由於沒有把按鈕編組,所以你不管怎麼點選,都只能選一個。
-
QButtonGroup
: 可以把按鈕分組。延續剛才的範例,將按鈕分成性別和地區。
from PySide6.QtWidgets import QApplication, QWidget, QRadioButton, QLabel , QGridLayout , QButtonGroup
class RadioButtonExample(QWidget):
def __init__(self):
super().__init__()
# 創建按鈕編組
gender_group = QButtonGroup(self)
region_group = QButtonGroup(self)
# 創建 QRadioButton
boy_button = QRadioButton("男")
girl_button = QRadioButton("女")
Taipei_button = QRadioButton("台北")
Taichung_button = QRadioButton("台中")
# 把按鈕添加到按鈕編組
gender_group.addButton(boy_button)
gender_group.addButton(girl_button)
region_group.addButton(Taipei_button)
region_group.addButton(Taichung_button)
# 布局
layout = QGridLayout()
layout.addWidget(boy_button,0,0)
layout.addWidget(girl_button,0,1)
layout.addWidget(Taipei_button,1,0)
layout.addWidget(Taichung_button,1,1)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication([])
window = RadioButtonExample()
window.show()
app.exec()
QRadioButton 常用的信號
-
toggled.connect(function)
: 當狀態改變時,會發送信號。下面範例是當按鈕狀態改變時,標籤文字會改變。
from PySide6.QtWidgets import QApplication, QWidget, QRadioButton, QLabel , QVBoxLayout
class RadioButtonExample(QWidget):
def __init__(self):
super().__init__()
# 創建 QRadioButton
boy_button = QRadioButton("男")
girl_button = QRadioButton("女")
#創建標籤
Label = QLabel("性別")
#觸發
boy_button.toggled.connect(lambda: Label.setText("性別:男"))
girl_button.toggled.connect(lambda: Label.setText("性別:女"))
#布局
layout = QVBoxLayout()
layout.addWidget(boy_button)
layout.addWidget(girl_button)
layout.addWidget(Label)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication([])
window = RadioButtonExample()
window.show()
app.exec()
QRadioButton 常用的功能
-
isChecked(bool)
: 用於得知目前按鈕的狀態。
-
setDisabled(bool)
: 設定是否禁用。
-
checkabale(bool)
: 用來設定元件是否可以被選取,與 setDisabled(bool)
類似,但不同之處在於 checkable(bool)
設定後,元件仍然可以被點擊,但點擊後會切換選取狀態(例如選中或取消選中);而 setDisabled(bool)
則是完全禁用該元件,無法進行任何互動。
-
setChecked(bool)
: 設定按鈕的勾選狀態。
下面範例是將台中設置禁用,台北雖然可以點選,但點後人會切換成取消,預設是台南。
from PySide6.QtWidgets import QApplication, QWidget, QRadioButton, QLabel , QGridLayout
class RadioButtonExample(QWidget):
def __init__(self):
super().__init__()
# 創建 QRadioButton
Tainan = QRadioButton("台南")
Kaohsiung = QRadioButton("高雄")
Taipei = QRadioButton("台北")
Taichung = QRadioButton("台中")
# 設定方法
Tainan.setChecked(True)
Taichung.setDisabled(True)
Taipei.setCheckable(False)
#布局
layout = QGridLayout()
layout.addWidget(Tainan,0,1)
layout.addWidget(Kaohsiung,0,0)
layout.addWidget(Taipei,1,0)
layout.addWidget(Taichung,1,1)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication([])
window = RadioButtonExample()
window.show()
app.exec()
總結
1. 複選按鈕 (QCheckBox)
功能 |
方法 |
添加按鈕 |
QCheckBox(str) |
功能 |
方法 |
勾選狀態改變 |
checkStateChanged.connect(function) |
功能 |
方法 |
設定按鈕勾選狀態 |
csetChecked(bool) |
設定是否禁用 |
setDisabled(bool) |
得知目前按鈕狀態 |
isChecked(bool) |
2. 單選按鈕 (QRadioButton)
功能 |
方法 |
添加按鈕 |
QRadioButton(str) |
按鈕編組 |
QButtonGroup |
功能 |
方法 |
按鈕狀態改變 |
toggled.connect(function) |
功能 |
方法 |
按鈕可否被選取 |
checkabale(bool) |
是否禁用 |
setDisabled(bool) |
得知目前按鈕狀態 |
isChecked(bool) |
設定按鈕勾選狀態 |
setChecked(bool) |